﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Biuro.Klasy;
using System.Drawing.Printing;

namespace Biuro.Formy
{
    public delegate void PobieranieRezerwacji();
    public delegate void UsuwanieRezerwacji();
    public partial class AddEditReservation : Form
    {
        public class WysylaczEventArgs : EventArgs
        {
            private int _id;
            public int Id
            {
                get { return _id; }
            }
            public WysylaczEventArgs(int Id)
            {
                this._id = Id;
            }
        }


        public delegate void WysylaczEventHandler(object sender, WysylaczEventArgs e);

        public event WysylaczEventHandler PobierzUslugi;

        string zapytanie;
        public event PobieranieRezerwacji PobierzRezerwacje;
        public event UsuwanieRezerwacji UsunRezerwacje;

        List<usluga> uslugi;

        public List<usluga> Uslugi
        {
            get { return uslugi; }
            set 
            { 
                uslugi = value;
                lbUslugi.Text = "Wybrane usługi dodatkowe";
                foreach (usluga u in uslugi)
                {
                    lbUslugi.Text += Environment.NewLine + u.Nazwa + " - " + u.Cena.ToString();
                }
            }
        }
        public string Zapytanie
        {
            get { return zapytanie; }
            set { zapytanie = value; }
        }

        public AddEditReservation()
        {
            InitializeComponent();
        }
        public int WybraneID
        {
            get{ return Int32.Parse(dgwWynik.SelectedRows[0].Cells[0].Value.ToString());}
        }
        private void btUsun_Click(object sender, EventArgs e)
        {
            try
            {
                if (MessageBox.Show("Czy napewno chcesz usunąć rezerwacje nr " + WybraneID + " ?", "Tak/Nie?", MessageBoxButtons.YesNo) == DialogResult.Yes)
                {
                    if (UsunRezerwacje != null)
                        UsunRezerwacje();
                }
                else
                {

                }
            }
            catch
            { }
        }
        public DataTable WynikWyszukiwania
        {
            set
            {
                if (dgwWynik.DataSource != null)
                {
                    dgwWynik.Columns.Remove("numer");
                    dgwWynik.Columns.Remove("nazwisko");
                    dgwWynik.Columns.Remove("wycieczka");
                    dgwWynik.Columns.Remove("wyjazd");
                    dgwWynik.Columns.Remove("powrot");
                    dgwWynik.Columns.Remove("cena");
                    dgwWynik.Columns.Remove("adres");
                    dgwWynik.Columns.Remove("konsultant");
                }
                
                dgwWynik.DataSource = value;
                if (dgwWynik.DataSource != null)
                {
                    dgwWynik.Columns["adres"].Visible = false;
                    dgwWynik.Columns["konsultant"].Visible = false;
                }
            }
        }

        private void btSzukaj_Click(object sender, EventArgs e)
        {
            zapytanie = "SELECT * FROM rezerwacje WHERE 1=1";
            if (tbImie.TextLength > 0)
            {
                zapytanie += " AND nazwisko LIKE \'%" + tbImie.Text + "%\'";
            }
            if (tbNazwisko.TextLength > 0)
            {
                zapytanie += " AND nazwisko LIKE \'" + tbNazwisko.Text + "%\'";
            }
            if (tbNumer.TextLength > 0)
            {
                zapytanie += " AND numer = " + tbNumer.Text;
            }
            if (tbNazwaWycieczki.TextLength > 0)
            {
                zapytanie += " AND wycieczka LIKE \'" + tbNazwaWycieczki.Text + "%\'";
            }

            if (PobierzRezerwacje != null)
                PobierzRezerwacje();
        }

        private void AddEditReservation_Paint(object sender, PaintEventArgs e)
        {
            System.Drawing.Drawing2D.LinearGradientBrush basebackground;
            basebackground = new System.Drawing.Drawing2D.LinearGradientBrush(new Point(0, 0), new Point(0, ClientSize.Height), Color.White, Color.LightGray);
            e.Graphics.FillRectangle(basebackground, ClientRectangle);
        }

        private void dgwWynik_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (PobierzUslugi != null)
                PobierzUslugi(this, new WysylaczEventArgs(WybraneID));
       } 

        private void btPrint_Click(object sender, EventArgs e)
        {
            try
            {
                PrintDocument pd = new PrintDocument();
                pd.DocumentName = "Rezerwacja nr " + dgwWynik.SelectedRows[0].Cells[0].Value.ToString();
                pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
                pd.Print();
            }
            catch(Exception exp)
            {
                MessageBox.Show(exp.Message);
            }
        }

        void pd_PrintPage(object sender, PrintPageEventArgs e)
        {
            Graphics g = e.Graphics;
            Font czcionka = new Font("Arial", 14);
            StringFormat format = new StringFormat();
            format.Alignment = StringAlignment.Center;
            Rectangle rect = new Rectangle(0, 0, 1000, 1200);
            g.DrawRectangle(Pens.Blue, rect);
            g.DrawString("Konsultant: \n" + dgwWynik.SelectedRows[0].Cells[7].Value.ToString(), czcionka, Brushes.Black, new Point(600, 50));
            g.DrawString("Klient: \n" + dgwWynik.SelectedRows[0].Cells[1].Value.ToString() + "\n" + dgwWynik.SelectedRows[0].Cells[6].Value.ToString().Replace('*', '\n'), czcionka, Brushes.Black, new Point(50, 50));
            g.DrawString("Rezerwacja nr " + dgwWynik.SelectedRows[0].Cells[0].Value.ToString(), czcionka, Brushes.Black,new Point(300,200));
            g.DrawString("Wycieczka: \n " + dgwWynik.SelectedRows[0].Cells[2].Value.ToString() + "\nData wyjazdu: " + DateTime.Parse(dgwWynik.SelectedRows[0].Cells[3].Value.ToString()).ToShortDateString() + "\nData powrotu: " + DateTime.Parse(dgwWynik.SelectedRows[0].Cells[4].Value.ToString()).ToShortDateString() + "\nCena: " + dgwWynik.SelectedRows[0].Cells[5].Value.ToString() + " zł", czcionka, Brushes.Black, new Point(50, 220));
            g.DrawString(lbUslugi.Text.ToString(),czcionka, Brushes.Black, new Point(50, 350));

            g.DrawString("Podpis klienta: \n\n................................................", czcionka, Brushes.Black, new Point(50, 1000));
            g.DrawString("Podpis konsultanta: \n\n................................................", czcionka, Brushes.Black, new Point(500, 1000));
        }
        
    }
}
